package com.smarthome.core.user;

import java.util.List;

import com.smarthome.domain.bean.ShUserRole;
import com.smarthome.domain.bean.ShUser;
import com.smarthome.domain.vo.boss.Tree;

public interface UserRoleService {

    /**
     * 查询所有开放的权限
     * @return
     * @createTime 2015年8月26日 下午4:40:51
     * @author KongXiangyu
     */
    List<ShUserRole> queryAllPropertyRoles();
    
    /**
     * @title 添加shUserResources
     * @createTime 2015年9月23日 上午11:36:30
     * @author dhc
     */
    List<ShUserRole>  addShUserRolesResources(  List<ShUserRole> roles);
    /**
     * @title 通过角色查询角色列表
     * @createTime 2015年9月23日 上午10:24:38
     * @author dhc
     */
    List<ShUserRole> queryPropertyRolesByRole(ShUserRole role);
    
    /***
     * @title 根据小区ID，获取小区下的角色
     * @createTime 2015年9月19日 上午11:56:09
     * @author dhc
     */
    List<ShUserRole> shUserRolesByResidenceId(Long residenceId);
    

    /**
     * 根据id查询系统角色
     * @param id
     * @return
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    ShUserRole queryPropertyRoleById(Long id);

    /**
     * 根据用户Id查询权限
     * @param userId
     * @return
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    List<ShUserRole> queryPropertyRolesByUserId(Long userId);

    /**
     * 获取用户树状角色
     * @param shUser
     * @param type
     * @return
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    List<Tree> tree(ShUser shUser);

    /**
     * 获取用户树状角色
     * @param shUser
     * @return
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    List<ShUserRole> treeGrid(ShUser shUser,ShUserRole role);

    /**
     * 编辑角色
     * @param role
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    void edit(ShUserRole role);

    /**
     * 添加角色
     * @param role
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    void add(ShUserRole role);

    /**
     * 删除角色
     * @param id
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    void delete(Long id);

    /**
     * 分派角色权限
     * @param role
     * @createTime 2015年8月26日 下午4:42:14
     * @author KongXiangyu
     */
    void grant(ShUserRole role);
    
  /**
   * @title 根据小区id，获取根角色
   * @createTime 2015年9月19日 上午10:37:00
   * @author dhc
   */
    ShUserRole UserRoleRootByResidenceId(Long residenceId);
    
    /**
     * @title 获取小区下的角色树
     * @createTime 2015年9月19日 下午2:10:50
     * @author dhc
     */
    List<Tree> treeByResidenceId(Long residenceId);
    
    /**
     * @title 重名验证 ，验证规则，一个父级下 只能有一个名字一样
     * @createTime 2015年9月22日 下午8:32:43
     * @author dhc
     */
    boolean isRepeat(ShUserRole role);
}
